package network;

import org.omg.CORBA.PUBLIC_MEMBER;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public  class UDPServer {
    //构造方法
     private DatagramSocket socket=null;
     public UDPServer(int port) throws SocketException {
        //通过socket对网卡进行数据的操作
        socket=new DatagramSocket(port);
    }

    //启动服务器
    public void start() throws IOException {
        //规定输入的数据格式
        System.out.println("服务器启动了！！！");
        //即为面向数据报格式
        while (true){
            //接收请求
            DatagramPacket requestPacket=new DatagramPacket(new byte[1024],1024);
            //通过接收的方法进行数据的传入
            socket.receive(requestPacket);
            //此时将数据转化为字符串
            String request=new String(requestPacket.getData(),0,requestPacket.getLength());
            //注意这里的长度是字节的长度，不是字符串的长度
            //进行响应的操作
            String respond=process(request);
            //发送响应,转化为面向数据包的类型
            DatagramPacket respondPacket=new DatagramPacket(respond.getBytes(),respond.getBytes().length,
                    requestPacket.getSocketAddress());
            //最后发送这个数据
            socket.send(respondPacket);

            System.out.printf("From [%s:%d] To [%s:%d] req: %s, resp: %s\n", requestPacket.getAddress().toString(),
                    requestPacket.getPort(), respondPacket.getAddress().getHostAddress(),respondPacket.getPort(),request, respond);
        }
    }

    public String process(String request) {
        //回调服务器的响应非常简单
        return request;
    }

    public static void main(String[] args) throws IOException {
        UDPServer udpServer=new UDPServer(9090);
        udpServer.start();
    }
}
